package com.jxpanda.commons.toolkit;

import com.jxpanda.commons.encrypt.RSA;
import com.jxpanda.commons.key.RSAKeyHelper;
import lombok.experimental.UtilityClass;
import lombok.extern.slf4j.Slf4j;

import java.security.PrivateKey;
import java.security.PublicKey;

/**
 * @author Panda
 */
@Slf4j
@UtilityClass
@SuppressWarnings("AlibabaClassNamingShouldBeCamel")
public class RSAKit {


    /**
     * 私钥签名，默认是用SHA256withRSA算法
     * 如果有其他算法需求，再做扩展，现在懒得做了，用的也不是太多
     */
    public static byte[] signature(String content, PrivateKey privateKey) {
        return RSA.signature(content, privateKey);
    }


    /**
     * 公钥验签，默认用SHA256withRSA算法
     */
    public static boolean verify(String content, byte[] sign, PublicKey publicKey) {
        return RSA.verify(content, sign, publicKey);
    }

    /**
     * 创建keyHelper
     * 这个函数不采用单例模式，原因如下：
     * 虽然对象的创建会占用一些资源
     * 密钥对的生产与加载大多数场景下，都是不频繁的，也就是说，没必要把对象单例出来持续占用内存
     * 在密钥对生产、读取等结束之后，这个工具类对象占用的内存应该被释放掉
     */
    public static RSAKeyHelper keyHelper() {
        return keyHelper(RSA.DEFAULT_KEY_SIZE);
    }

    public static RSAKeyHelper keyHelper(int keySize) {
        return new RSAKeyHelper(keySize);
    }


}
